package cn.lili.modules.member.aop.interceptor;

import cn.lili.modules.member.entity.dos.Member;
import cn.lili.modules.member.entity.dos.MemberPointsHistory;
import cn.lili.modules.member.entity.enums.PointTypeEnum;
import cn.lili.modules.member.service.MemberPointsHistoryService;
import cn.lili.modules.member.service.MemberService;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * 积分操作切面
 *
 * @author Chopper
 * @since 2020/11/17 7:22 下午
 */
@Slf4j
@Aspect
@Component
public class PointLogInterceptor {

	@Autowired
	private MemberPointsHistoryService memberPointsHistoryService;

	@Autowired
	private MemberService memberService;

	@After("@annotation(cn.lili.modules.member.aop.annotation.PointLogPoint)")
	public void doAfter(JoinPoint pjp) {
		// 参数
		Object[] obj = pjp.getArgs();
		try {
			// 变动积分
			Long point = 0L;
			if (obj[0] != null) {
				point = Long.valueOf(obj[0].toString());
			}
			// 变动类型
			String type = PointTypeEnum.INCREASE.name();
			if (obj[1] != null) {
				type = obj[1].toString();
			}
			// 会员ID
			String memberId = "";
			if (obj[2] != null) {
				memberId = obj[2].toString();
			}
			// 变动积分为0，则直接返回
			if (point == 0) {
				return;
			}

			// 根据会员id查询会员信息
			Member member = memberService.getById(memberId);
			if (member != null) {
				MemberPointsHistory memberPointsHistory = new MemberPointsHistory();
				memberPointsHistory.setMemberId(member.getId());
				memberPointsHistory.setMemberName(member.getUsername());
				memberPointsHistory.setPointType(type);

				memberPointsHistory.setVariablePoint(point);
				if (type.equals(PointTypeEnum.INCREASE.name())) {
					memberPointsHistory.setBeforePoint(member.getPoint() - point);
				} else {
					memberPointsHistory.setBeforePoint(member.getPoint() + point);
				}

				memberPointsHistory.setPoint(member.getPoint());
				memberPointsHistory.setContent(obj[3] == null ? "" : obj[3].toString());
				memberPointsHistory.setCreateBy("系统");
				memberPointsHistoryService.save(memberPointsHistory);
			}
		} catch (Exception e) {
			log.error("积分操作错误", e);
		}

	}

}
